sed 正则截取字符串

sed 正则表达式截取字符串

今天接到一个任务,是关于针对不同的版本的设备,用ansible下发不同的指令的。写吧。

首先,这个任务的第一步,也是很关键的一步,就是去获取版本号,查出来的版本号如下:

Version: VyOS 1.1.8

Version: VyOS 1.2.1

Version: v1.10.7

很明显,一般的字符串截取,已经不顶用了。那么,在这里,应该采用正则表达式,去截取字符串。我们知道在正则里面:

1
2
\d 表示 一个数字
+ 表示多个字符

那么我们要去截取版本号,应该是(\d.\d+.\d)。但是偏偏sed不是这么玩的,有点恶心。

规则如下:

  • sed正则中的空格就用空格表示,而不是\s,补充:可以用\s

  • sed正则中的数字只能用[0-9],而不能用\d表示

  • sed正则中的1或者多个,只能用+,而不能用+,区别就是加了转义字符

  • sed正则中的()前要加转义字符,变成\(\)

  • number=xxx这条赋值语句的等号两边不能有空格,如果赋值语句有空格,linux系统会认为number是一个命令

所以,我们的表示得这么去写:

1
查看版本的命令 | grep Version' | sed  's/\(.*\)\([0-9].[0-9]\+.[0-9]\)/\2/g'
文章作者: 海龟先生
文章链接: http://haiguixiansheng.org.cn/2019/09/17/sed 正则截取字符串/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 海龟先生
打赏
  • 微信
  • 支付宝

评论